#pragma once

namespace soft_renderer
{
	class Vector3;

	class Quaternion
	{
	private:
		double _x = 0, _y = 0, _z = 0, _w = 1;

	public:
		Quaternion(double x = 0, double y = 0, double z = 0, double w = 1);

		double x();
		double y();
		double z();
		double w();
		void set(double x, double y, double z, double w);
		void setFromAxisAngle(Vector3 axis, double angle);
		void identity();
		void multiplyQuaternions(const Quaternion& a, const Quaternion& b);
	};
}
